package cn.ipanel.bigdata.job

import cn.ipanel.bigdata.dw.ods.AbsOdsHive
import org.apache.spark.sql.DataFrame

/**
 * Author: lzz
 * Date: 2022/3/28 15:05
 */
package object ods {

  abstract class AbsOdsJob extends AbsJob {

    /**
     * ods层的操作的目标Table，用于存储生成的数据
     * @return
     */
    def optTargetTable: AbsOdsHive
    lazy val _T: AbsOdsHive = optTargetTable

    /**
     * 数据源，应该来自文件
     * @return
     */
    def source(): DataFrame

    /**
     * 默认的 prepare 方法，先删除操作表的分区
     */
    override def onPrepare(): Unit = _T.drop(_DAY)

    /**
     * 默认的 startup 方法，在 onPrepare 分发之后
     */
    override def onStartup(): Unit = _T.save(_JOIN.join(_INTENT.intent(source(), _DAY), _DAY))

    override def onFruited(): Boolean = _T.find(_DAY).limit(1).count() > 0
  }
}